package othello.client.utility.screen;

import java.util.ArrayList;
import java.util.List;

/**
 * <p>
 * Screenで描画対象と出来るオブジェクト
 * </p>
 */
public abstract class View {
	public interface Observer {
		void notifyUpdate();
	}

	private final List<Observer> observers = new ArrayList<Observer>();

	/**
	 * オブザーバーを追加します。
	 * 
	 * @param observer
	 *            追加するオブザーバー
	 */
	public void addObserver(Observer observer) {
		this.observers.add(observer);
	}

	/**
	 * オブザーバーに更新を通知します。
	 */
	protected final void notifyUpdate() {
		for (Observer one : this.observers) {
			one.notifyUpdate();
		}
	}

	/**
	 * 指定されたScreenへの描画を行います。
	 * 
	 * @param screen
	 *            描画対象のScreen
	 */
	public abstract void draw(Screen screen);
}